# python数据基础第四节：向量化计算（numpy）
"""
    数据处理：pandas
    数据计算：NumPy
    数据可视化：matplotlib
"""
# 导入pandas中的序列 DataFrame
from pandas import DataFrame
# 使用numpy
import numpy

# 向量化计算会返回到相同的位置，结果不会小于0 ，不会大于1
r = numpy.arange(0.1, 0.5, 0.01)
print("向量化计算（加法）：{}".format(r + r))
print("向量化计算（减法）：{}".format(r - r))
print("向量化计算（乘法）：{}".format(r * r))
print("向量化计算（除法）：{}".format(r / r))
print("长短不易的时候会把2加到所有的值中：{}".format(r + 2))

# 函数式的向量化计算   r的五次方
print("函数式的向量化计算:{}".format(numpy.power(r, 5)))

# 向量化运算，比较运算r>0.3 对比所有的值，返回True，False 这种情况可以结合过滤使用
b = r[r > 0.3]
print("结合过滤使用:{}".format(b))

# 矩阵运算  # 结果与sum(r*r)差不多
print("矩阵运算{}".format(numpy.dot(r, r.T)))

df = DataFrame({"data1": numpy.random.randn(5),
                "data2": numpy.random.randn(5)})
# 找出df中的最小值
min_data = df.apply(lambda x: min(x))
print("找出df中的最小值:{}".format(min_data))
# 找出每行的最小值
min_hang = df.apply(lambda x: min(x), axis=1)
print("找出每行的最小值:{}".format(min_hang))
# 判断每个列的值是否都大于0
dayu = df.apply(lambda x: numpy.all(x > 0), axis=1)
print("判断每个列的值是否都大于0:{}".format(dayu))

# 结合条件过滤不满足条件的值
filter_data = df[df.apply(lambda x: numpy.all(x > 0), axis=1)]
print("结合条件过滤不满足条件的值:{}".format(filter_data))
